﻿Imports System.Data.SqlClient

Public Class UsuarioDAO

    Public Function validar(ByVal modelo As Usuario) As Usuario
        Dim usuario As New Usuario

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT * FROM USUARIO WHERE email=@VALOR1 AND passw=@VALOR2"
            Dim cmd As New SqlCommand(sql, cn)

            cmd.Parameters.AddWithValue("@VALOR1", modelo.email)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.passw)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                usuario.id_Usuario = dr(0).ToString
                usuario.email = dr(1).ToString
                usuario.dni = dr(2).ToString
                usuario.passw = dr(3).ToString
                usuario.nombre = dr(4).ToString
                usuario.ape_pat = dr(5).ToString
                usuario.ape_mat = dr(6).ToString
                usuario.pais = dr(7).ToString
                usuario.ciudad = dr(8).ToString
                usuario.direccion = dr(9).ToString
                usuario.telefono_fijo = dr(10).ToString
                usuario.telefono_movil = dr(11).ToString
                usuario.rol = dr(12).ToString

            Else
                Throw New DAOExcepcion("Usuario y/o clave incorrecto")
            End If

            dr.Close()


            ' OBTENER SUS ROLES

            sql = "SELECT Usuario.rol, Restaurante_has_Usuario.restaurante from usuario inner join Restaurante_has_Usuario on Usuario.email = Restaurante_has_Usuario.email and Usuario.email like @VALOR1"
            cmd = New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.email)

            Dim listadoRoles As New Collection
            Dim listadoRestaurantes As New Collection

            dr = cmd.ExecuteReader
            While dr.Read
                'Dim r As New Rol
                Dim res As New Restaurante
                usuario.rol = dr(0).ToString
                usuario.restaurante = dr(1).ToString
                'listadoRoles.Add(r)
            End While

            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return usuario
    End Function

    Function buscar(ByVal modelo As Usuario) As Collection
        Dim listausuario As New Collection

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "select ape_pat, ciudad, rol from Usuario where ape_pat like @VALOR1 and ciudad like @VALOR2 and rol like @VALOR3"
            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", "%" + modelo.ape_pat + "%")
            cmd.Parameters.AddWithValue("@VALOR2", "%" + modelo.ciudad + "%")
            cmd.Parameters.AddWithValue("@VALOR3", "%" + modelo.rol + "%")
            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()

            While dr.Read
                Dim model As New Usuario
                'model.email = dr(0).ToString
                'model.dni = dr(0).ToString
                'model.nombre = dr(2).ToString
                model.ape_pat = dr(0).ToString
                model.ciudad = dr(1).ToString
                'model.direccion = dr(5).ToString
                'model.telefono_movil = dr(6).ToString
                model.rol = dr(2).ToString
                listausuario.Add(model)
            End While

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return listausuario
    End Function


    Function insertar(ByVal modelo As Usuario) As Usuario

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "INSERT INTO USUARIOS (EMAIL, PASSW, ROL, FEC_NAC, NOMBRE, APE_PAT, APE_MAT, DNI, PAIS, CIUDAD, DIRECCION, TELEFONO_FIJO, TELEFONO_MOVIL ) VALUES (@VALOR1, @VALOR2, @VALOR3, @VALOR4, @VALOR5, @VALOR6, @VALOR7, @VALOR8, @VALOR9, @VALOR10, @VALOR11, @VALOR12, @VALOR13)"

            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.email)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.passw)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.rol)
            cmd.Parameters.AddWithValue("@VALOR4", modelo.fec_nac)
            cmd.Parameters.AddWithValue("@VALOR5", modelo.nombre)
            cmd.Parameters.AddWithValue("@VALOR6", modelo.ape_pat)
            cmd.Parameters.AddWithValue("@VALOR7", modelo.ape_mat)
            cmd.Parameters.AddWithValue("@VALOR8", modelo.dni)
            cmd.Parameters.AddWithValue("@VALOR9", modelo.pais)
            cmd.Parameters.AddWithValue("@VALOR10", modelo.ciudad)
            cmd.Parameters.AddWithValue("@VALOR11", modelo.direccion)
            cmd.Parameters.AddWithValue("@VALOR12", modelo.telefono_fijo)
            cmd.Parameters.AddWithValue("@VALOR13", modelo.telefono_movil)

            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("UsuarioDAO: No insertó")
            End If

            ' LEER EL ULTIMO ID
            sql = "SELECT @@IDENTITY"
            cmd = New SqlCommand(sql, cn)
            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                modelo.id_Usuario = CType(dr(0), Integer)
            End If

            dr.Close()
            cn.Close()

        Catch ex As Exception
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo
    End Function



End Class
